package com.unism.util;

/**
 * @author Administrator 初始化配置页面的基本信息
 */
public class PageUtil {

	private static final long serialVersionUID = 19000101123412L;
	public static String queryStartKey = "_qStart";
	public static String queryCountKey = "_qCount";
	/** 每页默认显示的行数 */
	public static Integer Defaultrows;
	/** 自定义每页显示的行数 */
	private Integer customizeRows;
	/** 是否应用 自定义每页显示的行数 */
	private Boolean enableCustomizePageSize;
	/** 记录总数 */
	private Long totalRecord;
	/** 当前页 */
	private Integer page;
	/** 总页数 */
	private Integer pageTotal;
	/** true 代表是第一访问 ，false代表非第一次访问 */
	private boolean firstTime = true;

	/** 默认加载配置文件 */
	static {
		loadDefaultPageSize();
	}


	public static void loadDefaultPageSize() {

		Defaultrows = Constant.rows;
	}

	/**
	 * 功能：更新页面中的总记录数
	 * 
	 * @param totalRecord
	 */
	public void updateTotalRecord(Long totalRecord) {
		if (totalRecord == null) {
			totalRecord = 0L;
		}
		// 每页显示多少条记录数（如果customizePageSize不合法时采用默认值）
		Integer customizePageSize = getCustomizeRows();
		// 获取当前页
		Integer page = getPage();
		Integer pageTotal = null;
		// 总页数
		pageTotal = (int) Math.ceil((double) totalRecord / customizePageSize);
		if (pageTotal <= 0) {
			pageTotal = 1;
		}
		Integer start = getQueryStart();
		setTotalRecord(totalRecord);
		setPageTotal(pageTotal);
		setCustomizeRows(customizePageSize);

	}

	/**
	 * 功能：获得起始记录数
	 * 
	 * @author wujin wcj@unism.com.cn
	 * @return
	 * @version 2016年7月15日上午11:57:49
	 */
	public Boolean isNeedPage() {
		if ((null != page && page == -1) || (null != customizeRows && customizeRows == -1)) {
			return false;
		}
		return true;
	}

	/**
	 * 功能：获得起始记录数
	 * 
	 * @author wujin wcj@unism.com.cn
	 * @return
	 * @version 2016年7月15日下午12:03:16
	 */
	public int getQueryStart() {
		long l = (getPage() - 1);
		l = l * getCustomizeRows();
		if (l < 0) {
			l = 0;
		}
		return new Long(l).intValue();
	}

	/**
	 * 功能：获取实际每页的记录数
	 * 
	 * @return
	 */
	public int getQueryCount() {
		Integer size = getCustomizeRows();

		return new Long(getPage() == getPageTotal() ? (getTotalRecord() - (getPage() - 1) * size) : size).intValue();
	}
	/**
	 * 分页类构造函数
	 * 
	 * @author wujin wcj@unism.com.cn
	 * @param page
	 * @param customizeRows
	 * @version 2016年7月15日上午11:59:05
	 */
	public PageUtil(Integer page, Integer customizeRows) {

		if ((null != page && page == -1) || (null != customizeRows && customizeRows == -1)) {
			this.page = page;
			this.customizeRows = customizeRows;
			return;
		}

		if (null == page || page <= 0) {
			this.page = 1;
		} else {
			this.page = page;
		}
		if (null == customizeRows || customizeRows <= 0) {
			this.customizeRows = Defaultrows;
		} else {
			this.customizeRows = customizeRows;
		}
	}

	public Integer getCustomizeRows() {
		return customizeRows;
	}

	public void setCustomizeRows(Integer customizeRows) {
		this.customizeRows = customizeRows;
	}

	public Boolean getEnableCustomizePageSize() {
		return enableCustomizePageSize;
	}

	public void setEnableCustomizePageSize(Boolean enableCustomizePageSize) {
		this.enableCustomizePageSize = enableCustomizePageSize;
	}

	public Long getTotalRecord() {
		return totalRecord;
	}

	public void setTotalRecord(Long totalRecord) {
		this.totalRecord = totalRecord;
	}

	public Integer getPage() {
		return page;
	}

	public void setPage(Integer page) {
		this.page = page;
	}

	public Integer getPageTotal() {
		return pageTotal;
	}

	public void setPageTotal(Integer pageTotal) {
		this.pageTotal = pageTotal;
	}

	public boolean isFirstTime() {
		return firstTime;
	}

	public void setFirstTime(boolean firstTime) {
		this.firstTime = firstTime;
	}
}
